
let isRequesting = false;  // 这里用来判断是否已有请求在进行中

// 请求拦截器
const requestInterceptor = (options) => {
  // 你可以在这里修改请求头、请求参数等
  // console.log('请求开始', options);
  // console.log('请求已经进入拦截器');

  // 从本地存储获取 token
  const token = wx.getStorageSync('token');
  // const token = '123';
  
  // 如果存在 token，则将其添加到请求头
  if (token) {
    // console.log('token:', token);
    options.header = {
      ...options.header,
      'Authorization': `${token}`,
    };
  }

  // 你可以在这里修改更多的请求配置，比如设置默认的 baseURL
  options.url =  options.url;

  return options;
};

// 响应拦截器
const responseInterceptor = (res) => {
  // 你可以在这里处理响应数据
  // console.log('响应数据', res);

  if (res.statusCode === 401) {
    // Token 过期或无效，进行重新登录
    console.error("Token 过期或无效，进行重新登录");

    // 清除本地存储中的 token
    wx.removeStorageSync('token');

    // 提示用户重新登录
    wx.showToast({
      title: '登录失效，请重新登录',
      icon: 'none',
      duration: 2000,
    });

    // 跳转到登录页面
    wx.redirectTo({
      url: '/pages/login/login', // 登录页面路径
    });

    // 不继续执行后续的成功回调
    return null;  // 返回 null 表示中断请求
  }

  // 其他的响应处理（如成功响应）
  // console.log('响应成功，返回res')
  return res;
};

// 封装 request
const request = (options) => {
  // 在每个请求开始前，执行请求拦截器
  options = requestInterceptor(options);

  return new Promise((resolve, reject) => {
    wx.request({
      url: options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: options.header || { 'Content-Type': 'application/json' },
      success: (res) => {
        // 在每个请求成功后，执行响应拦截器
        const response = responseInterceptor(res);
        // console.log('response:',response)
        // 如果响应为 null，表示请求被中断（如 token 过期）
        if (response) {
          if (options.success) {
            options.success(response);
          }
          resolve(response); // 调用 resolve 返回数据
        }
      },
      fail: (err) => {
        // 如果有 fail 回调，执行它
        if (options.fail) {
          options.fail(err);
        }
        reject(err);
        wx.showToast({
          title: '请求失败',
          icon: 'none',
        });
      },
    });
  });
};

export default request;